'\u004F\u030C'.normalize('NFC').length // 1
console.log('\u004F\u030C'.normalize('NFC').length) // 1
console.log('\u004F\u030C'.normalize('NFKC').length) // 1

let s = 'Hello world';
console.log('---s.length', s.length);//空格也算长度
console.log(s[5]);
s.endsWith('Hello', 5) // true endsWith的行为与其他两个方法有所不同。它针对前n个字符,
// 而其他两个方法针对从第n个位置直到字符串结束。

Number('0b111')
console.log(Number('0b111'));//7 将0b和0o前缀的字符串数值转为十进制，要使用Number方法。

console.log(parseInt(7.8));

// 对于空值或其他类型的值，Math.clz32方法会将它们先转为数值，然后再计算。
Math.clz32('foo') // 32 没有数值所以就返回0
console.log(Math.clz32(NaN));//32

console.log(Math.imul(0x7fffffff, 0x7fffffff)); // 1  超过了2的53次方 这个方法是两个数值相乘 
console.log(0x7fffffff);
console.log(Math.imul(22, 3));//66

Math.expm1(1)  // 1.718281828459045  Math.expm1(x)返回 ex - 1，即Math.exp(x) - 1

console.log(Math.pow(2, 1023), "---1024");
console.log(Math.pow(2, 53), '----53');
console.log(Math.pow(2, 54), '----54');


// 超过 53 个二进制位的数值，无法保持精度
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true


